home *** CD-ROM | disk | FTP | other *** search
- DEFINT A-Z
- DECLARE SUB menu12 ()
- DECLARE SUB menu11 ()
- DECLARE SUB menu10 ()
- DECLARE SUB menu09 ()
- DECLARE SUB menu08 ()
- DECLARE SUB menu07 ()
- DECLARE SUB menu06 ()
- DECLARE SUB menu05 ()
- DECLARE SUB menu04 ()
- DECLARE SUB menu03 ()
- DECLARE SUB menu02 ()
- DECLARE SUB menu01 ()
- DECLARE SUB shareWare ()
- DECLARE SUB windowDivider (topLine%, howLong%, atCol%)
- DECLARE SUB center (linenumber%, centeredText$)
- DECLARE SUB drawBox (row1, col1, row2, col2)
- DECLARE SUB FkeySelect (FkeyPressed%)
- DECLARE SUB glissUP ()
- DECLARE SUB screenTexture ()
- DECLARE SUB menuMain ()
- DECLARE SUB windowBar (startBar, stopBar)
-
- ' twotap2.bas - the function key menuing system
-
- menuMain
-
- ' Author's Notes:
- '
- ' twotap.BAS - the Function Key Menuing System for QuickBASIC and
- ' BASIC PDS 7.1
- '
- ' In my opinion, Microsoft's PDS 7.1 is a dazzler. I wrote a sizeable
- ' application in it and got nothing but compliments for the "very
- ' professional" look of the windows, menus.
- '
- ' I found that that "dazzle" came at a high price in terms of
- ' memory management and library management. A lot of the "quick" and
- ' certainly the simple of BASIC went on the altar of the User Inter-
- ' face.
- '
- ' I decided I would NEVER get caught in that trap again, but still a
- ' quick and easy menuing system is always called for in any program.
- ' My customer support work suggested that even the newest user can
- ' handle Function keys with aplomb. They are clearly marked and there
- ' are enough of them to do practically anything.
- '
- ' Hence TWOTAP.BAS Tap a max of two Function Keys are you are off
- ' and running with an absolute minimum of memory overhead and library
- ' management.
- '
- ' I'd love to see the improvements you make in this program -- but
- ' remember: we don't want to create a lot of baggage to carry around
- ' to only be used on rare occasions. Small is beautiful when you need
- ' space for algoritims and arrays that are doing the REAL work while
- ' the operator contemplates your "professional" screen.
- '
- ' I can also envision an approach that would reduce the amount of
- ' code dramatically at -- I'm afraid -- a considerable loss of
- ' clarity. There IS a lot of duplication in the menus -- and
- ' probably a lot more capacity than you will need (11 X 11 means
- ' the systems "capacity" is 121 selections(!).
- '
- ' BUT, as it stands now, each menu is 'free standing' and a self
- ' contained unit - your app may need to go no deeper than the Main
- ' Menu and the "free standing" nature of the system means you could
- ' just start deleting what you don't need. If the menus are too
- ' deeply entwined with each other, I'm afraid scaling up or down
- ' might be very complicated.
- '
- ' Kirk Woodward
- ' PO Box 610171
- ' Dallas, TX 75261-0171
- ' CompuServe: 70146,51 Voice: 817/488-4940 FAX: 817/488-4945
- '
- '
-
- SUB menu01
-
- COLOR 0, 7
- CALL drawBox(2, 2, 11, 30)
-
- LOCATE 2, 8: COLOR 15, 0: PRINT " Menu Number One": COLOR 0, 7
- LOCATE 3, 5: PRINT "Go do Task #1 F1"
- LOCATE 4, 5: PRINT "Go do Task #2 F2"
- LOCATE 5, 5: PRINT "Go do Task #3 F3"
- LOCATE 6, 5: PRINT "Go do Task #4 F4"
- LOCATE 7, 5: PRINT "Go do Task #5 F5"
- LOCATE 8, 5: PRINT "Go do Task #6 F6"
- windowBar 2, 30
- LOCATE 10, 5: PRINT "Quit F10"
-
- FkeySelect FkeyPressed
-
- ' 'dim' the menu title to shift operator's attention
-
- LOCATE 2, 8: COLOR 7, 0: PRINT " Menu Number One": COLOR 0, 7
-
- SELECT CASE FkeyPressed
-
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- CASE 10: EXIT SUB
- CASE ELSE
- END SELECT
-
- ' each of the menus has this 'advisory' routine at the end of
- ' the SELECT CASE block, you probably won't need it and good
- ' programmming practices would suggest it should be in a separate
- ' SUB rather than being typed 12 times. I duplicated it
- ' for purposes of clarity -- so you can see the 'flow' exactly, rather
- ' than follow the logic through a maze of subs.
-
- center 24, SPACE$(70)
- center 24, "You touched F Key #" + STR$(FkeyPressed)
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu01
-
-
- END SUB
-
- SUB menu02
-
- COLOR 0, 7
- CALL drawBox(2, 28, 11, 55)
-
- LOCATE 2, 34: COLOR 15, 0: PRINT " Menu Number Two ": COLOR 0, 7
- LOCATE 3, 30: PRINT "Task #1 F1"
- LOCATE 4, 30: PRINT "Task #2 F2"
- LOCATE 5, 30: PRINT "Task #3 F3"
- LOCATE 6, 30: PRINT "Task #4 F4"
- LOCATE 7, 30: PRINT "Task #5 F5"
- LOCATE 8, 30: PRINT "Task #6 F6"
- windowBar 28, 55
- LOCATE 10, 30: PRINT "Quit F10"
-
- FkeySelect FkeyPressed
-
- SELECT CASE FkeyPressed
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- ' can always use up to 12 options, just make box bigger
- CASE 10: EXIT SUB
- CASE ELSE
- END SELECT
-
-
- center 24, SPACE$(70)
- center 24, "You touched F Key #" + STR$(FkeyPressed)
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu02
-
-
-
- END SUB
-
- SUB menu03
-
- COLOR 0, 7
- CALL drawBox(2, 45, 11, 75)
-
- LOCATE 2, 50: COLOR 15, 0: PRINT " Menu Number Three ": COLOR 0, 7
- LOCATE 3, 47: PRINT "Task #1 F1"
- LOCATE 4, 47: PRINT "Task #2 F2"
- LOCATE 5, 47: PRINT "Task #3 F3"
- LOCATE 6, 47: PRINT "Task #4 F4"
- LOCATE 7, 47: PRINT "Task #5 F5"
- LOCATE 8, 47: PRINT "Task #6 F6"
- windowBar 45, 75
- LOCATE 10, 47: PRINT "Quit F10"
-
- FkeySelect FkeyPressed
-
- SELECT CASE FkeyPressed
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- ' can always use up to 12 options, just make box bigger
- CASE 10: EXIT SUB
- CASE ELSE
- END SELECT
-
- center 24, SPACE$(70)
- center 24, "You touched F Key #" + STR$(FkeyPressed)
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu03
-
-
-
-
- END SUB
-
- SUB menu04
-
- drawBox 2, 15, 6, 47
-
- COLOR 15, 0: LOCATE 2, 22: PRINT " Menu Number Four ": COLOR 0, 7
- LOCATE 3, 18: PRINT "Go Do Task #1............F1"
- LOCATE 4, 18: PRINT "Go do Task #2............F2"
- LOCATE 5, 18: PRINT "Quit....................F10"
-
- FkeySelect FkeyPressed
-
- ' dim the title
-
- COLOR 7, 0: LOCATE 2, 22: PRINT " Menu Number Four ": COLOR 0, 7
-
- SELECT CASE FkeyPressed
-
- CASE 1
- CASE 2
- CASE 10: EXIT SUB
- CASE ELSE
-
- END SELECT
-
- center 24, SPACE$(70)
- center 24, " You touched F Key #" + STR$(FkeyPressed) + " "
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu04
-
-
- END SUB
-
- SUB menu05
-
- COLOR 0, 7: drawBox 2, 48, 11, 77
-
- COLOR 15, 0: LOCATE 2, 54: PRINT " Menu Number Five ": COLOR 0, 7
-
- LOCATE 3, 52: PRINT "Go do Task #1........F1"
- LOCATE 4, 52: PRINT "Go do Task #2........F2"
- LOCATE 5, 52: PRINT "Go do Task #3........F3"
- LOCATE 6, 52: PRINT "Go do Task #4........F4"
- LOCATE 7, 52: PRINT "Go do Task #5........F5"
- LOCATE 8, 52: PRINT "Go do Task #6........F6"
- windowBar 48, 77
- LOCATE 10, 52: PRINT "Quit..............F10"
-
- FkeySelect FkeyPressed
-
- ' dim the menu title
-
- COLOR 7, 0: LOCATE 2, 54: PRINT " Menu Number Five ": COLOR 0, 7
-
-
- SELECT CASE FkeyPressed
-
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- CASE 10
- EXIT SUB
- CASE ELSE
- BEEP: SOUND 2000, 3: BEEP: BEEP
-
- END SELECT
-
- ' each of the menus has this 'advisory' routine at the end of
- ' the SELECT CASE block, you probably won't need it and good
- ' programmming practices would suggest it should be in a separate
- ' SUB rather than being type over again 12 times. I duplicated it
- ' for purposes of clarity -- so you can see the 'flow' exactly, rather
- ' than follow the logic through a maze of subs.
-
- center 24, SPACE$(70)
- center 24, " You touched F Key #" + STR$(FkeyPressed) + " "
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu05
-
- END SUB
-
- SUB menu06
-
- CALL drawBox(2, 2, 22, 78)
- LOCATE 20, 1: windowBar 2, 78
- CALL windowDivider(2, 18, 40)
-
- COLOR 15, 0: center 2, " Menu Six - When You Have a LOT to Say ": COLOR 0, 7
-
- LOCATE 3, 4: PRINT "F1 = There is no practical reason "
- LOCATE 4, 4: PRINT " why you can't have very ex-"
- LOCATE 5, 4: PRINT " tensive menu selection "
- LOCATE 6, 4: PRINT " descriptions -- if that "
- LOCATE 7, 4: PRINT " what's you need. This system "
- LOCATE 8, 4: PRINT " can accomodate as much detail "
- LOCATE 9, 4: PRINT " as you need."
- LOCATE 10, 4: PRINT "F2 = One Line is Fine too."
- LOCATE 11, 4: PRINT "F3 = Judicious use of the COLOR "
- LOCATE 12, 4: PRINT " command "; : COLOR 15, 0: PRINT " means "; : COLOR 0, 7: PRINT " you can "
- LOCATE 13, 4: PRINT " highlight words, phrases, "
- LOCATE 14, 4: PRINT " or letters -- BUT the 'code' "
- LOCATE 15, 4: PRINT " overhead goes up when you "
- LOCATE 16, 4: PRINT " add such whistles and bells "
- LOCATE 17, 4: PRINT " without much increase in func-"
- LOCATE 18, 4: PRINT " tionality. "
- LOCATE 19, 4: PRINT "F4 = Call Another Menu Direct too!"
- COLOR 15, 0: center 21, "F10= Always quits a menu.": COLOR 0, 7
-
- LOCATE 4, 42: PRINT "Judicious use of the SUBs: "
- LOCATE 5, 42: PRINT "windowBar ∙ windowDivider ∙"
- LOCATE 6, 42: PRINT "boxDraw ∙ means you can construct "
- LOCATE 7, 42: PRINT "very elaborate screens with a"
- LOCATE 8, 42: PRINT "absolute minimum of code & work."
- windowBar 40, 78
- COLOR 15, 0
- LOCATE 10, 41: PRINT " Even reverse those portions of the "
- LOCATE 11, 41: PRINT " screen that deserve special empha- "
- LOCATE 12, 41: PRINT " sis and operator attention while "
- COLOR 7, 0
- LOCATE 13, 41: PRINT " leaving other portions "; CHR$(34); "dimmed out"; CHR$(34); " "
- LOCATE 14, 41: PRINT " before -- or after -- they are used."
- COLOR 0, 7
- windowBar 40, 78
- CALL drawBox(16, 57, 18, 63)
- p = 0
-
- ' the following loop is an excellent example of the code overhead
- ' needed for -- seemingly -- incidental effects. They do nothing
- ' to improve the function of the program but still are often needed
- ' or wanted for 'packaging' effect.
-
- DO
- p = p + 1
- COLOR 30, 0
- LOCATE 17, 58: PRINT " Ok? "
- SLEEP 1
- COLOR 23, 0
- LOCATE 17, 58: PRINT " Ok? "
- SLEEP 1
- COLOR 7, 0
- LOCATE 17, 58: PRINT " Ok? "
- SLEEP 1
- LOOP UNTIL INKEY$ > ""
-
- COLOR 0, 7
-
- FkeySelect FkeyPressed
-
- SELECT CASE FkeyPressed
-
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- CASE 10: EXIT SUB
-
- END SELECT
-
- center 24, SPACE$(70)
- center 24, " You touched F Key #" + STR$(FkeyPressed) + " "
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu06
-
-
-
-
-
- END SUB
-
- SUB menu07
-
- drawBox 2, 35, 5, 66
-
- COLOR 15, 0: LOCATE 2, 43: PRINT " Menu Number Seven ": COLOR 0, 7
- LOCATE 3, 37: PRINT "Stack Up Menus F1"
- LOCATE 4, 37: PRINT "Quit F10"
-
- FkeySelect FkeyPressed
- COLOR 7, 0: LOCATE 2, 22: PRINT " Special Programs ": COLOR 0, 7
-
- SELECT CASE FkeyPressed
-
- CASE 1
- menu06
- menu09
- menu01
- menu02
- menu11
- menu12
- menu03
- menu04
- menu08
- menu05
- menu07
-
- CASE 2
-
- CASE 10: EXIT SUB
-
- CASE 27 ' esc key was pressed
-
- EXIT SUB
-
-
- CASE ELSE
- SOUND 800, 1
-
- END SELECT
-
-
- center 24, SPACE$(70)
- center 24, "You touched F Key #" + STR$(FkeyPressed)
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu07
-
-
- END SUB
-
- SUB menu08
-
- COLOR 15, 0: drawBox 12, 35, 22, 66
- COLOR 0, 7: LOCATE 12, 41: PRINT " Menu Number Eight ": COLOR 15, 0
- LOCATE 13, 37: PRINT "Go ahead and 'reverse' the "
- LOCATE 14, 37: PRINT "contents of the window to"
- LOCATE 15, 37: PRINT "give it added emphasis."
- windowBar 35, 66
- LOCATE 21, 37: COLOR 0, 7: PRINT " F10 = Quits "
-
-
- FkeySelect FkeyPressed
-
- IF FkeyPressed = 10 THEN
- EXIT SUB
- ELSE
- center 24, " You pressed F Key #" + STR$(FkeyPressed) + " "
- SLEEP 1: center 24, SPACE$(70)
- center 24, SPACE$(50)
- center 24, " Touch an F key to Select. "
- menu08
- END IF
-
- END SUB
-
- SUB menu09
-
- CALL drawBox(6, 20, 20, 60)
- COLOR 15, 0: center 6, " Menu Nine ": COLOR 0, 7
-
- LOCATE 7, 22: PRINT " F1 = Task 1 "
- LOCATE 8, 22: PRINT " F2 = Task 2"
- LOCATE 9, 22: PRINT " F3 = Task 3"
- LOCATE 10, 22: PRINT " F4 = Task 4"
- LOCATE 11, 22: PRINT " F5 = Task 5"
- LOCATE 12, 22: PRINT " F6 = Task 6"
- LOCATE 13, 22: PRINT " F7 = Task 7"
- LOCATE 14, 22: PRINT " F8 = Task 8"
- LOCATE 15, 22: PRINT " F9 = Task 9"
- LOCATE 16, 22: PRINT "F11 = Task 11"
- LOCATE 17, 22: PRINT "F12 = Task 12"
- windowBar 20, 60
- COLOR 15, 0: center 19, " F10= Always quits a menu ": COLOR 0, 7
-
- FkeySelect FkeyPressed
-
- SELECT CASE FkeyPressed
-
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- CASE 7
- CASE 8
- CASE 9
- CASE 10: EXIT SUB
- CASE 11
- CASE 12
-
- END SELECT
-
- center 24, SPACE$(70)
- center 24, " You touched F Key #" + STR$(FkeyPressed) + " "
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu09
-
- END SUB
-
- SUB menu10
-
- ' There can be no menu 10 because the F10 key is used to quit all
- ' menus. Give it a lot of thought before you change this method...
- ' you could wind up in an unbreakable loop.
-
- END SUB
-
- SUB menu11
-
- ' Remember that some older keyboards only have ten function keys, a
- ' conservative design would only depend on their being ten function
- ' keys rather than 12
-
-
- CALL drawBox(10, 5, 23, 21)
- COLOR 15, 0: LOCATE 10, 7: PRINT " Menu Eleven ": COLOR 0, 7
-
- LOCATE 11, 7: PRINT " F1 = Task 1 "
- LOCATE 12, 7: PRINT " F2 = Task 2"
- LOCATE 13, 7: PRINT " F3 = Task 3"
- LOCATE 14, 7: PRINT " F4 = Task 4"
- LOCATE 15, 7: PRINT " F5 = Task 5"
- LOCATE 16, 7: PRINT " F6 = Task 6"
- LOCATE 17, 7: PRINT " F7 = Task 7"
- LOCATE 18, 7: PRINT " F8 = Task 8"
- LOCATE 19, 7: PRINT " F9 = Task 9"
- LOCATE 20, 7: PRINT "F10 = Quits"
- LOCATE 21, 7: PRINT "F11 = Task 11"
- LOCATE 22, 7: PRINT "F12 = Task 12"
-
- FkeySelect FkeyPressed
-
- ' dim the menu title
-
- COLOR 7, 0: LOCATE 10, 7: PRINT " Menu Eleven ": COLOR 0, 7
-
- SELECT CASE FkeyPressed
-
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- CASE 7
- CASE 8
- CASE 9
- CASE 10: EXIT SUB
- CASE 11
- CASE 12
-
- END SELECT
-
- center 24, SPACE$(70)
- center 24, " You touched F Key #" + STR$(FkeyPressed) + " "
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu11
-
-
- END SUB
-
- SUB menu12
-
- ' Remember that some older keyboards only have ten function keys, a
- ' conservative design would only depend on their being ten function
- ' keys rather than 12
-
- CALL drawBox(5, 60, 18, 78)
- COLOR 15, 0: LOCATE 5, 63: PRINT " Menu Twelve ": COLOR 0, 7
-
- LOCATE 6, 62: PRINT " F1 = Use as "
- LOCATE 7, 62: PRINT " F2 = a Pick"
- LOCATE 8, 62: PRINT " F3 = List if"
- LOCATE 9, 62: PRINT " F4 = You Like."
- LOCATE 10, 62: PRINT " F5 = TWOTAP"
- LOCATE 11, 62: PRINT " F6 = is very"
- LOCATE 12, 62: PRINT " F7= flexible!"
- LOCATE 13, 62: PRINT " F8 = Call other"
- LOCATE 14, 62: PRINT " F9 = Menus "
- COLOR 15, 0: LOCATE 15, 62: PRINT " F10 = Quits ": COLOR 0, 7
- LOCATE 16, 62: PRINT "F11 = directly"
- LOCATE 17, 62: PRINT "F12 = too. "
-
- FkeySelect FkeyPressed
-
- SELECT CASE FkeyPressed
-
- CASE 1
- CASE 2
- CASE 3
- CASE 4
- CASE 5
- CASE 6
- CASE 7
- CASE 8
- CASE 9
- CASE 10: EXIT SUB
- CASE 11
- CASE 12
-
- END SELECT
-
- center 24, SPACE$(70)
- center 24, " You touched F Key #" + STR$(FkeyPressed) + " "
- SLEEP 1: center 24, SPACE$(70)
- center 24, " Touch an F key to Select. "
-
- menu12
-
- END SUB
-
- SUB menuMain
-
- 'select from items displayed on top line of the screen
- CLS
- COLOR 0, 7
-
- screenTexture
-
- DIM mmSelection$(1 TO 12)
-
- menuLoop:
-
- COLOR 0, 7: drawBox 1, 1, 8, 55
-
- mmSelection$(1) = "F1 = Menu 1 "
- mmSelection$(2) = "F2 = Menu 2 "
- mmSelection$(3) = "F3 = Menu 3 "
- mmSelection$(4) = "F4 = Menu 4"
- mmSelection$(5) = "F5 = Menu 5"
- mmSelection$(6) = "F6 = Menu 6"
- mmSelection$(7) = " F7 = Menu 7"
- mmSelection$(8) = " F8 = Menu 8"
- mmSelection$(9) = " F9 = Menu 9"
- mmSelection$(10) = "F10 = Quit "
- mmSelection$(11) = "F11 = Menu 11"
- mmSelection$(12) = "F12 = Menu 12 "
-
- FOR md = 1 TO 6
- LOCATE md + 1, 3: PRINT mmSelection$(md); TAB(30); mmSelection$(md + 6)
- NEXT md
-
- windowDivider 1, 7, 26
-
- LOCATE 1, 10: COLOR 15, 0: PRINT " TwoTap Menuing System Main Menu ": COLOR 0, 7
-
-
- drawBox 23, 2, 25, 79
- center 24, "Touch an F key to select."
-
- 'FOR tbp = 1 TO numberOfChoices
- ' LOCATE 2, 2 + colPos, 0: PRINT topBar1$(tbp);
- ' colPos = POS(1)
- ' itemLine(tbp) = CSRLIN
- ' itemCol(tbp) = POS(1)
- 'NEXT tbp
- 'STOP
- 'ic = ic + 1
-
-
- 'LOCATE itemLine(1), itemCol(1) - LEN(topBar1$(1)): COLOR 0, 7: PRINT topBar1$(1)'highlight 1st item
-
- CALL FkeySelect(FkeyPressed)
-
- ' now we 'dim' the Main Menu
- LOCATE 1, 10: COLOR 7, 0: PRINT " TwoTap Menuing System Main Menu ": COLOR 0, 7
-
- SELECT CASE FkeyPressed
-
- CASE 1
- menu01
- CASE 2
- menu02
- CASE 3
- menu03
- CASE 4
- menu04
- CASE 5
- menu05
- CASE 6
- menu06
- CASE 7
- menu07
- CASE 8
- menu08
- CASE 9
- menu09
- CASE 10
- COLOR 15, 0
- CLS
- PRINT
- PRINT , "Operator halted program. " + DATE$ + " " + TIME$
- PRINT
- PRINT
- PRINT
- shareWare
- END
- CASE 11
- menu11
- CASE 12
- menu12
- CASE ELSE
- SOUND 1700, 5: BEEP
-
- END SELECT
-
- CLS
-
- COLOR 0, 7
-
- screenTexture
-
- GOTO menuLoop
-
- STOP
-
-
- STOP
-
-
-
- END SUB
-
-